"""
云盘SDK使用示例

展示如何使用重构后的云盘SDK。
"""

import os
import json
from .client import CloudSDK
from .models import ProviderConfig


def basic_usage_example():
    """基础使用示例"""
    print("=== 云盘SDK基础使用示例 ===")
    
    # 1. 初始化SDK
    sdk = CloudSDK()
    
    # 2. 添加天翼云盘PC版提供者
    pc_config = {
        "username": "your_username",
        "password": "your_password",
        "root_folder_id": "-11",
        "order_by": "filename",
        "order_direction": "asc",
        "upload_thread": "3",
        "rapid_upload": True
    }
    
    try:
        provider = sdk.add_provider("tianyi_pc", pc_config, "天翼云盘PC版")
        if provider:
            print("✓ 成功添加天翼云盘PC版提供者")
        else:
            print("✗ 添加提供者失败")
            return
    except Exception as e:
        print(f"✗ 添加提供者异常: {e}")
        return
    
    # 3. 登录
    try:
        if provider.login():
            print("✓ 登录成功")
        else:
            print("✗ 登录失败")
            return
    except Exception as e:
        print(f"✗ 登录异常: {e}")
        return
    
    # 4. 列出根目录文件
    try:
        files = provider.list("/")
        print(f"✓ 根目录有 {len(files)} 个项目:")
        for file in files[:5]:  # 只显示前5个
            file_type = "目录" if file.is_dir() else "文件"
            print(f"  - {file_type}: {file.name}")
        if len(files) > 5:
            print(f"  ... 还有 {len(files) - 5} 个项目")
    except Exception as e:
        print(f"✗ 列出文件异常: {e}")
    
    # 5. 保存会话
    try:
        results = sdk.save_all_sessions()
        if results.get("tianyi_pc"):
            print("✓ 会话保存成功")
        else:
            print("✗ 会话保存失败")
    except Exception as e:
        print(f"✗ 保存会话异常: {e}")


def tv_provider_example():
    """天翼云盘TV版使用示例"""
    print("\n=== 天翼云盘TV版使用示例 ===")
    
    # 初始化SDK
    sdk = CloudSDK()
    
    # 添加天翼云盘TV版提供者
    tv_config = {
        "access_token": "your_access_token",
        "root_folder_id": "-11",
        "order_by": "filename",
        "order_direction": "asc",
        "type": "personal",
        "family_id": "",
        "upload_thread": "3",
        "rapid_upload": True
    }
    
    try:
        provider = sdk.add_provider("tianyi_tv", tv_config, "天翼云盘TV版")
        if provider:
            print("✓ 成功添加天翼云盘TV版提供者")
            
            # 登录（TV版使用token）
            if provider.login():
                print("✓ TV版登录成功")
                
                # 列出文件
                files = provider.list("/")
                print(f"✓ 根目录有 {len(files)} 个项目")
            else:
                print("✗ TV版登录失败")
        else:
            print("✗ 添加TV版提供者失败")
    except Exception as e:
        print(f"✗ TV版操作异常: {e}")


def file_operations_example():
    """文件操作示例"""
    print("\n=== 文件操作示例 ===")
    
    sdk = CloudSDK()
    
    # 获取已配置的提供者
    providers = sdk.list_providers()
    if not providers:
        print("✗ 没有配置任何提供者")
        return
    
    provider_type = providers[0]
    provider = sdk.get_provider(provider_type)
    
    if not provider:
        print(f"✗ 获取提供者 {provider_type} 失败")
        return
    
    try:
        # 创建测试目录
        test_dir = "/SDK测试目录"
        if provider.mkdir(test_dir):
            print(f"✓ 创建目录 {test_dir} 成功")
        else:
            print(f"✗ 创建目录 {test_dir} 失败")
        
        # 获取文件信息
        file_info = provider.get_file_info(test_dir)
        if file_info:
            print(f"✓ 获取文件信息成功: {file_info.name}")
        else:
            print("✗ 获取文件信息失败")
        
        # 重命名目录
        new_name = "SDK测试目录_重命名"
        if provider.rename(test_dir, new_name):
            print(f"✓ 重命名为 {new_name} 成功")
        else:
            print(f"✗ 重命名失败")
        
        # 删除目录
        if provider.delete(f"/{new_name}"):
            print(f"✓ 删除目录 {new_name} 成功")
        else:
            print(f"✗ 删除目录失败")
            
    except Exception as e:
        print(f"✗ 文件操作异常: {e}")


def config_management_example():
    """配置管理示例"""
    print("\n=== 配置管理示例 ===")
    
    sdk = CloudSDK()
    
    # 列出所有提供者
    providers = sdk.list_providers()
    print(f"已配置的提供者: {providers}")
    
    # 获取配置管理器
    config_manager = sdk.config_manager
    
    # 列出配置中的提供者
    config_providers = config_manager.list_providers()
    print(f"配置中的提供者: {config_providers}")
    
    # 获取会话管理器
    session_manager = sdk.session_manager
    
    # 列出保存的会话
    sessions = session_manager.list_sessions()
    print(f"已保存的会话: {sessions}")


def cli_usage_example():
    """命令行使用示例"""
    print("\n=== 命令行使用示例 ===")
    
    print("可以使用以下命令行操作:")
    print("1. 添加提供者:")
    print('   python -m src.sdk.cli add-provider --type tianyi_pc --name "天翼云盘" --config \'{"username":"user","password":"pass"}\'')
    
    print("\n2. 列出提供者:")
    print("   python -m src.sdk.cli list-providers")
    
    print("\n3. 登录:")
    print("   python -m src.sdk.cli login --type tianyi_pc")
    
    print("\n4. 列出文件:")
    print("   python -m src.sdk.cli list-files --type tianyi_pc --path /")
    
    print("\n5. 上传文件:")
    print("   python -m src.sdk.cli upload --type tianyi_pc --local-path ./test.txt --remote-path /test.txt")
    
    print("\n6. 下载文件:")
    print("   python -m src.sdk.cli download --type tianyi_pc --remote-path /test.txt --local-path ./downloaded.txt")


def main():
    """主函数"""
    print("云盘SDK使用示例")
    print("=" * 50)
    
    # 基础使用示例
    basic_usage_example()
    
    # TV版使用示例
    tv_provider_example()
    
    # 文件操作示例
    file_operations_example()
    
    # 配置管理示例
    config_management_example()
    
    # 命令行使用示例
    cli_usage_example()
    
    print("\n" + "=" * 50)
    print("示例结束")


if __name__ == "__main__":
    main()